﻿#region << 文件说明 >>

/*----------------------------------------------------------------
 * 命名空间：Vampirewal.Core.FlowEngine.Interface
 * 唯一标识：84693bd9-174b-4a28-8435-704c2319f2c9
 * 文件名：IVampirewalFlowNodeOption
 *
 * 创建者：杨程
 * 电子邮箱：235160615@qq.com
 * 创建时间：2023/10/27 17:35:10
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/

#endregion << 文件说明 >>

namespace Vampirewal.Core.FlowEngine;

/// <summary>
/// 流程引擎节点配置器
/// </summary>
public interface IVampirewalFlowNodeOption
{
    /// <summary>
    /// 设置开始节点
    /// </summary>
    /// <param name="mode">节点执行方式</param>
    /// <returns></returns>
    IVampirewalFlowNodeOption SetStartNode(ExcutionModeType mode);

    /// <summary>
    /// 设置普通节点
    /// </summary>
    /// <param name="UnitIndex">节点序号</param>
    /// <param name="UnitName">节点名称</param>
    /// <param name="Description">节点描述</param>
    /// <param name="mode">节点执行方式</param>
    /// <param name="SetLink">配置连线</param>
    /// <returns></returns>
    IVampirewalFlowNodeOption SetNormalNode(int UnitIndex, string UnitName, string Description, ExcutionModeType mode, Action<IVampirewalFlowLinkOption> SetLink);

    /// <summary>
    /// 设置普通节点
    /// </summary>
    /// <param name="UnitIndex">节点序号</param>
    /// <param name="UnitName">节点名称</param>
    /// <param name="Description">节点描述</param>
    /// <param name="mode">节点执行方式</param>
    /// <param name="RejectUnitIndex">驳回节点</param>
    /// <param name="SetLink">配置连线</param>
    /// <returns></returns>
    IVampirewalFlowNodeOption SetNormalNode(int UnitIndex, string UnitName, string Description, ExcutionModeType mode, int RejectUnitIndex, Action<IVampirewalFlowLinkOption> SetLink);

    /// <summary>
    /// 设置结束节点
    /// </summary>
    /// <param name="UnitIndex">节点序号</param>
    /// <param name="SetLink">配置连线</param>
    /// <returns></returns>
    void SetEndNode(int UnitIndex, Action<IVampirewalFlowLinkOption> SetLink);
}